//
//  Person5.swift
//  swift-02
//
//  Created by China Dragon on 2023/8/21.
//

import UIKit

class Person5: NSObject {
    /*
    getter setter 方法  在swift中极少用到
    oc 中利用 getter 方法，编写懒加载，而swift中提供了 lazy
     
    如果不希望暴露的方法或者属性，都需要用  private 保护起来
     */
    
   private var _name: String?
    var name: String? {
        get {
            return _name;
        }
        
        set {
           _name = newValue
        }
        
    }
    
    var name2: String?// 和上面的get \ set 一样
    
    //read only 属性, 只写 getter
    //swift get only
    var title: String? {
        get{
            return "Mr " + (name ?? "")// ?? 优先级低，所以加（）
        }
        
    }
    
   
    /*
     只读属性的简写方法，如果属性的‘修饰’方法，只提供 getter ，那么 可以省略 get {}
     另外一种叫法：计算型属性
     每次调用的时候，都会执行 {} 中的代码，结果取决于其他属性或者原因
     
     每次都要计算，浪费性能，如果计算量很小，可以使用
     不需要开辟额外的空间
     */
    var title2: String? {
        return "Mr2 222 "+(name ?? "")
    }
    
    /*
     懒加载
     只需要计算一次
     需要开辟单独的空间计算结果
     必包的代码再也会被调用
     如果计算量很大，需要提前准备 ，这时使用懒加载
     */
    lazy var title3: String? = {
        /*
         使用self.用于闭包在执行时，准确的绑定对象
         闭包中的self. 是不能省略的
         */
        return "Mr3 333 "+(self.name ?? "")
    }()
    
    
    

}
